package it.azienda.managerworkstandard.view;

import it.azienda.framework.modello.BeanBase;
import it.azienda.framework.persistenza.DAOConnectionSingleton;
import it.azienda.managerworkstandard.modello.BeanLogin;
import it.azienda.framework.utilita.Utilita;
import it.azienda.framework.view.DettaglioStorico;
import it.azienda.managerworkstandard.modello.BeanCliente;
import it.azienda.managerworkstandard.modello.BeanCartaRegalo;
import it.azienda.managerworkstandard.modello.BeanCartaRegaloDet;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIViewRoot;
import javax.faces.component.html.HtmlForm;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import org.hibernate.Session;

public class DettaglioCartaRegalo extends DettaglioStorico {

    private HtmlForm form = new HtmlForm();
    private BeanCartaRegalo beanCartaRegalo;
    private ArrayList listaCarteDet;

    public void setBeanCartaRegalo(BeanCartaRegalo beanCartaRegalo) {
        setObj(beanCartaRegalo);
        this.beanCartaRegalo = beanCartaRegalo;
    }

    public BeanCartaRegalo getBeanCartaRegalo() {
        return (BeanCartaRegalo) getObj();
    }

    public HtmlForm getForm() {
        form = (HtmlForm) Utilita.getSession().getAttribute("formStorico");
        if (form == null) {
            form = new HtmlForm();
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanCartaRegalo = (BeanCartaRegalo) ctx.getExternalContext().getRequestMap().get("beanCartaRegalo");
        controlloDopoSalvataggio(beanCartaRegalo);
        Utilita.getSession().removeAttribute("form");
        return form;
    }

    public void controlloDopoSalvataggio(Object obj) {
        BeanCartaRegalo clienteDett = (BeanCartaRegalo) obj;
    }

    public void setForm(HtmlForm form) {
        setFormObject(form);
        this.form = form;
        Utilita.getSession().setAttribute("formStorico", form);
    }

    public void primaInserimento() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanCartaRegalo = (BeanCartaRegalo) ctx.getExternalContext().getRequestMap().get("beanCartaRegalo");
        BeanLogin login = (BeanLogin) Utilita.getSession().getAttribute("login");
        HashMap listaOggetti = login.getListaOggetti();
        Integer posizione = (Integer) Utilita.getSession().getAttribute("posizioneOggetto");
        BeanCliente beanCliente = (BeanCliente) listaOggetti.get(posizione);
        this.beanCartaRegalo.setBeanCliente(beanCliente);

    }

    public void controlloCartaRegalo(ValueChangeEvent event) {
        if (event.getNewValue() != null) {
            if (event.getNewValue().toString().length() >= 1) {
                String codiceFedelta = "";
                try {
                    codiceFedelta = (String) event.getNewValue();
                } catch (Exception ex) {
                    System.out.println("Errore: " + ex.toString());
                }
                if (codiceFedelta == null) {
                    codiceFedelta = "";
                }
                String url = "";
                try {
                    String query = "select carta from BeanCartaRegalo carta"
                            + " where carta.codice = :codice";
                    Session sessione = DAOConnectionSingleton.newSession();
                    BeanCartaRegalo beanCartaRegalo = (BeanCartaRegalo) sessione.createQuery(query)
                            .setString("codice", codiceFedelta)
                            .uniqueResult();
                    if (beanCartaRegalo == null) {
                        Utilita.getRequest().setAttribute("esito", "Nessun Cliente associato a questa carta regalo!");
                        url = "/esito.jsp";
                        Utilita.getRequest().removeAttribute("beanCliente");

                    } else {
                        BeanBase base = new BeanBase();
                        ArrayList listaOggetti = base.caricaTutti("Cliente");
                        Integer idBean = beanCartaRegalo.getBeanCliente().getId();
                        try {
                            for (int y = 0; y < listaOggetti.size(); y++) {
                                Integer pos = new Integer(y);
                                Method method = null;
                                Object obj = (Object) listaOggetti.get(pos.intValue());
                                Class classe = obj.getClass();
                                classe.newInstance();

                                Method[] metodi = classe.getMethods();
                                for (int i = metodi.length; i > 0; i--) {
                                    Method metodo = metodi[i - 1];
                                    String nomeMetodo = metodo.getName();
                                    if (nomeMetodo.startsWith("getId")) {
                                        method = classe.getMethod(nomeMetodo, new Class[]{});
                                        Integer id = (Integer) method.invoke(obj, new Object[]{});
                                        if (id != null) {
                                            if (id.intValue() == idBean.intValue()) {
                                                Utilita.getSession().removeAttribute("posizioneOggetto");
                                                Utilita.getSession().setAttribute("posizioneOggetto", pos);
                                                Utilita.getRequest().setAttribute("beanCliente", obj);

                                                BeanLogin login = (BeanLogin) Utilita.getSession().getAttribute("login");
                                                Utilita.getSession().removeAttribute("login");
                                                login.setListaOggetti(new HashMap());
                                                login.settaHashMapOggetti(listaOggetti);
                                                Utilita.getSession().setAttribute("login", login);

                                                y = listaOggetti.size();
                                            }
                                        }
                                    }
                                }
                            }
                        } catch (Exception ex) {
                        }
                        url = "/dettaglioCliente.jsf";

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    url = "/errore.jsp";
                    Utilita.getRequest().setAttribute("errore", "Errore: " + e.toString());

                } finally {
                    FacesContext ctx = FacesContext.getCurrentInstance();
                    UIViewRoot view = ctx.getApplication().getViewHandler().createView(ctx, url);
                    view.setViewId(url);
                    ctx.setViewRoot(view);
                    ctx.renderResponse();
                }
            }
        }
    }

    /**
     * @return the listaCarteDet
     */
    public ArrayList getListaCarteDet() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanCartaRegalo = (BeanCartaRegalo) ctx.getExternalContext().getRequestMap().get("beanCartaRegalo");
        if (beanCartaRegalo != null) {
            if (beanCartaRegalo.getId() != null) {

                try {
                    String query = "select det from BeanCartaRegaloDet det"
                            + " where det.beanCartaRegalo.id = :id"
                            + " order by data desc";
                    Session sessione = DAOConnectionSingleton.newSession();

                    listaCarteDet = (ArrayList) sessione.createQuery(query)
                            .setInteger("id", beanCartaRegalo.getId().intValue())
                            .list();
                } catch (Exception e) {
                }

                listaCarteDet.add(new BeanCartaRegaloDet());
            }
        }
        if (listaCarteDet == null) {
            listaCarteDet = new ArrayList();
        }
        return listaCarteDet;
    }

    /**
     * @param listaCarteDet the listaCarteDet to set
     */
    public void setListaCarteDet(ArrayList listaCarteDet) {
        this.listaCarteDet = listaCarteDet;
    }

    public void modificaCartaDet() {
        FacesContext ctx = FacesContext.getCurrentInstance();

        try {
            String idDet = (String) Utilita.getRequest().getParameter("idDet");

            beanCartaRegalo = (BeanCartaRegalo) ctx.getExternalContext().getRequestMap().get("beanCartaRegalo");
            BeanCartaRegaloDet regaloDet = (BeanCartaRegaloDet) Utilita.getRequest().getAttribute("cartedet");
            if (regaloDet.getData() == null) {
                HtmlForm form = (HtmlForm) ctx.getViewRoot().findComponent("erroriDataBase");
                form.setRendered(true);
                ctx.addMessage("erroriDataBase", new FacesMessage("erroriDataBase", "Data Obbligatoria"));
                return;
            }
            if (regaloDet.getImporto() == null) {
                HtmlForm form = (HtmlForm) ctx.getViewRoot().findComponent("erroriDataBase");
                form.setRendered(true);
                ctx.addMessage("erroriDataBase", new FacesMessage("erroriDataBase", "Importo Obbligatorio"));
                return;
            }
            regaloDet.modifica();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void cancellaCartaDet() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        try {
            String idDet = (String) Utilita.getRequest().getParameter("idDet");

            beanCartaRegalo = (BeanCartaRegalo) ctx.getExternalContext().getRequestMap().get("beanCartaRegalo");
            BeanCartaRegaloDet regaloDet = (BeanCartaRegaloDet) Utilita.getRequest().getAttribute("cartedet");
            regaloDet.cancella();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void inserisciCartaDet() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        try {
            beanCartaRegalo = (BeanCartaRegalo) ctx.getExternalContext().getRequestMap().get("beanCartaRegalo");
            BeanCartaRegaloDet regaloDet = (BeanCartaRegaloDet) Utilita.getRequest().getAttribute("cartedet");
            regaloDet.setBeanCartaRegalo(beanCartaRegalo);
            if (regaloDet.getData() == null) {
                HtmlForm form = (HtmlForm) ctx.getViewRoot().findComponent("erroriDataBase");
                form.setRendered(true);
                ctx.addMessage("erroriDataBase", new FacesMessage("erroriDataBase", "Data Obbligatoria"));
                return;
            }
            if (regaloDet.getImporto() == null) {
                HtmlForm form = (HtmlForm) ctx.getViewRoot().findComponent("erroriDataBase");
                form.setRendered(true);
                ctx.addMessage("erroriDataBase", new FacesMessage("erroriDataBase", "Importo Obbligatorio"));
                return;
            }

            regaloDet.inserisci();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
